home *** CD-ROM | disk | FTP | other *** search
Text File | 1998-06-06 | 2.7 KB | 136 lines | [TEXT/CWIE] |
- #include "ClassDesc.h"
- #include "TheDebugger.h"
-
- #include <stddef.h>
-
- //------------------------------------------------------------------------------
-
- ClassDesc* ClassDesc::fgClassList = nil; // List of ClassDesc, indexed by class ID.
- ClassID ClassDesc::fgLastClassID = 0; // The last used unique class ID.
-
- //------------------------------------------------------------------------------
- #pragma segment Main
-
- ClassDesc::ObjectRef::ObjectRef()
- : fClassID(kUninitializedClassID),
- fClassOffset(0)
- {
- #if qTheDebugger
- TheDbgr_Add_Object(this);
- #endif
- }
-
- //------------------------------------------------------------------------------
- #pragma segment Main
-
- ClassDesc::ObjectRef::~ObjectRef()
- {
- #if qTheDebugger
- TheDbgr_Delete_Object(this);
- #endif
- }
-
- //------------------------------------------------------------------------------
- #pragma segment Init
-
- ClassDesc::ClassDesc(size_t size, size_t offset, char* name, const ClassDesc** base_List, const DescType* ae_classes) :
- fDefaultConstructor(nil),
- fNextClassDesc(fgClassList),
- fClassName(name),
- fClassSize(size),
- fClassID(++fgLastClassID),
- fBaseClass(nil),
- fBaseClassDescList(nil),
- fClassOffset(-offset),
- fAEClassIDs(ae_classes)
- {
- fDefaultConstructor = this;
-
- if (qDebug && fgClassList == nil)
- {
- if (offsetof(ClassDesc, fClassName) != 8
- || offsetof(ClassDesc, fClassID) != 16)
- {
- DebugStr("\pClassDesc is mis-aligned");
- }
- }
-
- fgClassList = this;
-
- if (base_List != nil)
- {
- if ((fBaseClass = base_List[0]) != nil)
- {
- fBaseClassDescList = &base_List[1];
- }
- }
- }
-
- //------------------------------------------------------------------------------
- #pragma segment Main
-
- void ClassDesc::RegisterObject(ObjectRef& ref, void* object) const
- {
- long offset = object ? ((char*) object) - ((char*) &ref) : 0;
-
- ref.fClassID = fClassID;
- ref.fClassOffset = offset;
-
- const_cast<ClassDesc*>(this)->fClassOffset = offset;
- }
-
- //------------------------------------------------------------------------------
-
- /*
- AEClassListHdl ClassDesc::GetAEClasses() const
- {
- Debugger();
-
- return nil;
- }
- */
-
- //------------------------------------------------------------------------------
-
- /*
- bool ClassDesc::IsAEClass(DescType aClassID) const
- {
- const DescType* idlist = fAEClassIDs;
-
- if (idlist != nil) // we have classes
- {
- DescType id;
-
- while ((id = *idlist++) != 0)
- {
- if (id == aClassID)
- {
- return true;
- }
- }
- }
-
- // we don't handle it directly -- try superclasses
-
- const ClassDesc* base = fBaseClass;
-
- if (base != nil)
- {
- const ClassDesc** baseList = fBaseClassDescList;
-
- do
- {
- if (base->IsAEClass(aClassID))
- {
- return true;
- }
- }
- while ((base = *baseList++) != nil);
- }
-
- return false;
- }
- */
-
- //------------------------------------------------------------------------------
-